// 数组解构
// let [a,b] = [1,2];
// 等同于 let a = 1,b = 2;

let arr = [1,[2,3],4];
let [a,[b,c],d] = arr;
console.log("a =",a);
console.log("b =",b);
console.log("c =",c);
console.log("d =",d);
// 根据数组的结构，进行变量的解构赋值，如果变量没有被解构附上值，那么值为undefined

// 非标准语法，解构通常需要申明+赋值同时进行。非标准语法中，可以对已经声明的变量赋值。
[a,b] = ['a','b'];
console.log("a =",a);
console.log("b =",b);

// 常用用法：交换两个变量的值
[a,b] = [b,a];
console.log("a =",a);
console.log("b =",b);

console.log("---------对象的解构赋值-----------")
// 对象的解构赋值
let obj = {
    name: "Hydra",
    age: 35,
    sex: "男",
    friend: {
        name: "Mary"
    },
    sports: ["足球","篮球"]
}

let {name,age,sex,friend} = obj;
console.log("name =",name);
console.log("age =",age);
console.log("sex =",sex);
console.log("friend =",friend);
// 注意：解构赋值，对于引用类型是浅拷贝

// 进阶用法：对象解构赋值时，可对变量重命名
// 定义n变量，把name值赋值给它；定义s变量把sex值赋值给它。
let {name: n,sex: s} = obj;
console.log("n =",n);
console.log("s =",s);

// 如果变量在深层级中，也可以直接赋值出来
let {friend: {name:fn},sports:[,ball]} = obj;
console.log("fn =",fn)
console.log("ball =",ball)
